<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
</head>

<body>
    <pre>

    ★★★★★

    对象都会有一个属性 __proto__， 指向构造函数的 prototype 原型对象
    之所以我们实例对象可以使用构造函数 prototype 原型对象的属性和方法，就是因为对象有 __proto__ 原型的存在。

    __proto__对象原型和原型对象 prototype 是等价的
    
    __proto__对象原型的意义就在于为对象的查找机制提供一个方向，
    或者说一条路线，但是它是一个非标准属性，因此实际开发中，不可以使用这个属性，它只是内部指向原型对象 prototype

  </pre
    >
    <script>
      function Person(name, age) {}

      Person.prototype.sayHi = function () {
        console.log("Hello!");
      };
      const p = new Person();
      // 实例中的 __proto__ 指向原型对象
      console.log(p.__proto__); // {sayHi: ƒ, constructor: ƒ}
      console.log(Person.prototype); // {sayHi: ƒ, constructor: ƒ}
      console.log(p.__proto__ === Person.prototype); // true

      // // 实例对象都会有一个属性 __proto__ 指向构造函数的 prototype 原型对象
      // console.log(man.__proto__ === Person.prototype)  // true
    </script>
  </body>
</html>